package io.github.talelin.latticy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.github.talelin.latticy.dto.UserRechargeDTO;
import io.github.talelin.latticy.model.UserRechargeRecordDO;
import io.github.talelin.latticy.vo.UserRechargeVO;

import java.util.List;
import java.util.Map;

/**
 * 用户充值服务接口
 * @author talelin
 */
public interface UserRechargeService {

    /**
     * 创建充值记录
     */
    UserRechargeRecordDO createRechargeRecord(UserRechargeDTO dto);

    /**
     * 处理充值（增加用户积分）
     */
    UserRechargeRecordDO processRecharge(Integer recordId);

    /**
     * 取消充值
     */
    UserRechargeRecordDO cancelRecharge(Integer recordId, String reason);

    /**
     * 获取充值记录详情
     */
    UserRechargeRecordDO getRechargeRecord(Integer recordId);

    /**
     * 分页获取用户充值记录
     */
    IPage<UserRechargeVO> getUserRechargeRecords(Integer page, Integer count, Integer userId, String status, String rechargeType);

    /**
     * 分页获取所有充值记录（管理员）
     */
    IPage<UserRechargeVO> getAllRechargeRecords(Integer page, Integer count, String username, String status, String rechargeType);

    /**
     * 根据用户ID获取充值统计
     */
    List<UserRechargeVO> getUserRechargeStats(Integer userId);

    /**
     * 批量处理充值
     */
    List<UserRechargeRecordDO> batchProcessRecharge(List<Integer> recordIds);

    /**
     * 根据积分余额自动上架商品
     */
    void autoListingByPoints(Integer userId);

    /**
     * 获取用户商品统计信息
     */
    Map<String, Object> getUserProductStats(Integer userId);

    /**
     * 批量处理多个用户的自动上架
     */
    void batchAutoListingByPoints(List<Integer> userIds);

    /**
     * 根据积分余额获取上架规则描述
     */
    String getListingRuleDescription(Integer points);
}
